﻿////////////////////////////////////////////////////////////////////////////////////////////////////
//
//  © 2012 Stanislav S. Yarmonov.
//
//  TODO:LICENSE
//     
////////////////////////////////////////////////////////////////////////////////////////////////////
using System;
using System.Xml;
using System.Xml.Linq;

namespace Pandora.Xml
{
    ////////////////////////////////////////////////////////////////////////////////////////////////
    /// <summary>
    /// Extensions for the System.Xml.Linq.XElement.
    /// </summary>
    ////////////////////////////////////////////////////////////////////////////////////////////////
    public static class XElementExtensions
    {
        ////////////////////////////////////////////////////////////////////////////////////////////
        /// <summary>
        /// Get the attribute for XML element using its local name, not XName.
        /// </summary>
        /// <param name="element">
        /// XML element to get the attribute for.
        /// </param>
        /// <param name="name">
        /// Local name of the attribute.
        /// </param>
        /// <returns>
        /// Returns attribute found.
        /// </returns>
        ////////////////////////////////////////////////////////////////////////////////////////////
        public static XAttribute Attribute(this XElement element, string name)
        {
            return element.Attribute(XName.Get(name));
        }

        ////////////////////////////////////////////////////////////////////////////////////////////
        /// <summary>
        /// Get the attribute value for XML element.
        /// </summary>
        /// <remarks>
        /// Get value using attribute loca name (not XName) and default value, if attribute doesn't
        /// exists.
        /// </remarks>
        /// <param name="element">
        /// Element to get the attribute for.
        /// </param>
        /// <param name="name">
        /// Local name of the attribute.
        /// </param>
        /// <param name="default">
        /// Default value to be used, if attribute doesn't exists.
        /// </param>
        /// <returns>
        /// Returns attribute value.
        /// </returns>
        ////////////////////////////////////////////////////////////////////////////////////////////
        public static string Attribute(this XElement element, string name, string @default)
        {
            XAttribute attribute = element.Attribute(XName.Get(name));
            return attribute == null ? @default : attribute.Value;
        }
    }
}
